import cv2
def detectAndDescribe(image):
    gray =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    sift=cv2.SIFT.create()
    kp,des=sift.detectAndCompute(gray,None)
    return image,kp,des
imgA=cv2.imread('left_01.jpg')
imgB=cv2.imread('right_01.jpg')
imgA,kpA,desA=detectAndDescribe(imgA)
imgB,kpB,desB=detectAndDescribe(imgB)
matcher=cv2.BFMatcher(cv2.NORM_L2)
rawMatches=matcher.match(desA,desB)
rawMatches=sorted(rawMatches,key=lambda x:x.distance)
out=cv2.drawMatches(imgA,kpA,imgB,kpB,rawMatches[:30],None)
cv2.imshow('drawMatchers',out)
cv2.waitKey()
cv2.destroyAllWindows()